package com.dme.modules.utils;

import org.springframework.util.CollectionUtils;

import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

/**
 * @Author: 喜欢编程的代先生
 * @Date: 2022-06-19 18:15
 * @Description: 拒绝侵权
 */
public class ListUtils {

    /**
     * 拆分 list 集合 - 根据指定大小进行拆分
     * @param origin 目标集合
     * @param size 每个子集合的长度
     * @param <T>
     * @return
     */
    public static <T> List<List<T>> divide(List<T> origin, int size) {
        if (CollectionUtils.isEmpty(origin)) return Collections.EMPTY_LIST;
        int block = (origin.size() + size - 1) / size;
        return IntStream.range(0,block).boxed().map(i -> {
            int start = i * size;
            int end = Math.min(start + size,origin.size());
            return origin.subList(start,end);
        }).collect(Collectors.toList());
    }

    /**
     * 拆分 list 集合 - 平均拆分
     * @param origin
     * @param <T>
     * @return
     */
    public static <T> List<List<T>> divide(List<T> origin) {
        if (CollectionUtils.isEmpty(origin)) return Collections.EMPTY_LIST;
        int size = origin.size() >> 1;
        return IntStream.range(0,2).boxed().map(i -> {
            int start = i * size;
            int end = Math.min(start + size,origin.size());
            return origin.subList(start,end);
        }).collect(Collectors.toList());
    }

}
